/* 有获取表格数据的页面的状态数据逻辑
 * dependence - tableCoreMixin， tableBtnLoadingMixin, ConfirmTempMixin
 * 需要提供 - currentStatusApi - 当前页面的状态接口
-------------------------- */
const tableStatusMixin = {
  data () {
    return {
      status: '', // 状态参数
      currentStatus: '' // 当前状态操作
    }
  },
  computed: {
    isCurrentStatusOpposite () { return this.isStatusOpposite || false },
    tableStatusOkText () { return this.statusOkText || '恢复' },
    tableStatusCloseText () { return this.statusCloseText || '禁用' }
  },
  methods: {
    // 改变单个状态
    statusOne (id, index, status) {
      this.selectIds = id
      this.currentStatus = this._statusRule(status)
      this.ConfirmTemp(`确认${this.currentStatus}吗`, () => {
        this.AsyncLoading(this.currentStatus, index, this.statusApi)
      })
    },
    // 批量改变已选的数据状态(idKey: 行数据中id对应的字段名)
    statusSelected (idKey, status) {
      if (!this.selectList.length) return this.$message.warning('选择数据后才能操作')
      this.currentStatus = this._statusRule(status)
      this.selectIds = this.selectList.map(item => item[idKey]).join(',')
      this.ConfirmTemp(`确认${this.currentStatus}选中的${this.selectList.length}条数据吗`, () => {
        this.AsyncLoading(this.currentStatus, this.statusApi)
      })
    },
    // 状态接口
    async statusApi () {
      const [ err ] = await this.currentStatusApi()
      if (err) return this.$message.error('操作失败')
      this.$message.success(`${this.currentStatus}成功`)
      this.getTableData()
    },
    // 状态规则(后台默认：1为有效,0为禁用,)
    _statusRule (status) {
      this.status = status
      if (this.isCurrentStatusOpposite) {
        return status === '1' ? this.tableStatusCloseText : this.tableStatusOkText
      }
      return status === '1' ? this.tableStatusOkText : this.tableStatusCloseText
    }
  }
}

export default tableStatusMixin
